function dif_error( fileName )
%--------------------------------------------------------------------------
% Error Spectrogram Comparison
%
% Cooper Baker - 2014
%--------------------------------------------------------------------------

close all;

name = 'Error Spectrograms';

% set path
p = genpath( '../../analyze' );
addpath( p );

% get audio file info
fileInfo    = audioinfo( [ fileName, '.classic.wav' ] );
sr          = fileInfo.SampleRate;
samps       = fileInfo.TotalSamples;
winSize     = 512;
halfWinSize = winSize / 2;
overlap     = 4;

% make file names
rawFile  = sprintf( '%s.classic.spect.csv' , fileName );
lockFile = sprintf( '%s.lock.spect.csv', fileName );
peakFile = sprintf( '%s.peak.spect.csv', fileName );
bankFile = sprintf( '%s.bank.spect.csv', fileName );
solaFile = sprintf( '%s.sola.spect.csv', fileName );
olaFile  = sprintf( '%s.ola.spect.csv' , fileName );

% load file data
rawData  = csvread( rawFile  );
lockData = csvread( lockFile );
peakData = csvread( peakFile );
bankData = csvread( bankFile );
solaData = csvread( solaFile );
olaData  = csvread( olaFile  );

% get data size
size = length( rawData );

% calculate msec grid values
msec     = ( samps / sr ) * 1000;
gridMsec = 500;
gridHops = gridMsec / ( ( ( winSize / overlap ) / sr ) * 1000 );
hopSize  = winSize / overlap;
hopMsec  = ( hopSize / sr ) * 1000;

% calculate data maximums
rawMax  = max( rawData  );
lockMax = max( lockData );
peakMax = max( peakData );
bankMax = max( bankData );
solaMax = max( solaData );
olaMax  = max( olaData  );

% find maximum maximum and minimum maximum
MaxMax = max( [ rawMax lockMax peakMax bankMax solaMax olaMax ] );
MinMax = min( [ rawMax lockMax peakMax bankMax solaMax olaMax ] );

% graph formatting
fontName   = 'Times New Roman';
fontSize   = 12;
xTxt       = size * 0.015;
yTxt       = halfWinSize * 0.9;

% set up plot window
fig = figure( 1 );
set( fig, 'Name', sprintf( '%s - %s.wav', name, fileName ) );
set( fig, 'Position', [ 0 0 800 1200 ] );
set( fig, 'defaultAxesFontName', fontName );
set( fig, 'defaultTextFontName', fontName );
set( fig, 'defaultlinelinewidth', 3 );
set( fig, 'defaultaxescolororder', [ 0.8 0.2 0.2 ] );

% color mapping
colormap( [ [ 1 : -0.2/64 : 0.8 ]; ( [ 1 : -0.5/64 : 0.5 ] .^ 10 ) ; [ 1 : -0.5/64 : 0.5 ] .^ 20 ]' );

% plot fft ifft raw
title = 'Classic';
set( subplot( 1, 1, 1 ), 'Position', [ 0.1, 5.5/7, 0.8, 1/7.333 ] );
imagesc( rawData );
axis xy;
axis( [ 0 length( rawData ) 1 halfWinSize ] );
caxis( [ 0 MaxMax ] );
set( gca, 'XTick', [ 0 : gridHops : size ] );
set( gca, 'XTickLabel', [] );
set( gca, 'YTick', [ 1 : ( halfWinSize / ( sr / 4000 ) ) : halfWinSize ] );
set( gca, 'YTickLabel', [ 0 : 2000 : ( sr / 2 ) ] );
text( xTxt, yTxt, title, 'EdgeColor', 'k', 'BackgroundColor', 'w' );
bar = colorbar( 'location', 'East' );
set( get( bar, 'YLabel'), 'String', 'Sones' );
set( get( bar, 'YLabel'), 'Position', [ 0.75 MaxMax * 0.15 ] );

% plot fft ifft phase locked
title = 'Lock';
set( subplot( 6, 1, 2 ), 'Position', [ 0.1, 4.5/7, 0.8, 1/7.333 ] );
imagesc( lockData );
axis xy;
axis( [ 0 length( rawData ) 1 halfWinSize ] );
caxis( [ 0 MaxMax ] );
set( gca, 'XTick', [ 0 : gridHops : size ] );
set( gca, 'XTickLabel', [] );
set( gca, 'YTick', [ 1 : ( halfWinSize / ( sr / 4000 ) ) : halfWinSize ] );
set( gca, 'YTickLabel', [ 0 : 2000 : ( sr / 2 ) ] );
text( xTxt, yTxt, title, 'EdgeColor', 'k', 'BackgroundColor', 'w' );
bar = colorbar( 'location', 'East' );
set( get( bar, 'YLabel'), 'String', 'Sones' );
set( get( bar, 'YLabel'), 'Position', [ 0.75 MaxMax * 0.15 ] );

% plot fft ifft peak tracking
title = 'Peak';
set( subplot( 6, 1, 3 ), 'Position', [ 0.1, 3.5/7, 0.8, 1/7.333 ] );
imagesc( peakData );
axis xy;
axis( [ 0 length( rawData ) 1 halfWinSize ] );
caxis( [ 0 MaxMax ] );
set( gca, 'XTick', [ 0 : gridHops : size ] );
set( gca, 'XTickLabel', [] );
set( gca, 'YTick', [ 1 : ( halfWinSize / ( sr / 4000 ) ) : halfWinSize ] );
set( gca, 'YTickLabel', [ 0 : 2000 : ( sr / 2 ) ] );
text( xTxt, yTxt, title, 'EdgeColor', 'k', 'BackgroundColor', 'w' );
bar = colorbar( 'location', 'East' );
set( get( bar, 'YLabel'), 'String', 'Sones' );
set( get( bar, 'YLabel'), 'Position', [ 0.75 MaxMax * 0.15 ] );

% plot fft oscillator bank
title = 'Bank';
set( subplot( 6, 1, 4 ), 'Position', [ 0.1, 2.5/7, 0.8, 1/7.333 ] );
imagesc( bankData );
axis xy;
axis( [ 0 length( rawData ) 1 halfWinSize ] );
caxis( [ 0 MaxMax ] );
set( gca, 'XTick', [ 0 : gridHops : size ] );
set( gca, 'XTickLabel', [] );
set( gca, 'YTick', [ 1 : ( halfWinSize / ( sr / 4000 ) ) : halfWinSize ] );
set( gca, 'YTickLabel', [ 0 : 2000 : ( sr / 2 ) ] );
text( xTxt, yTxt, title, 'EdgeColor', 'k', 'BackgroundColor', 'w' );
bar = colorbar( 'location', 'East' );
set( get( bar, 'YLabel'), 'String', 'Sones' );
set( get( bar, 'YLabel'), 'Position', [ 0.75 MaxMax * 0.15 ] );

% plot synchronous overlap add
title = 'Sola';
set( subplot( 6, 1, 5 ), 'Position', [ 0.1, 1.5/7, 0.8, 1/7.333 ] );
imagesc( solaData );
axis xy;
axis( [ 0 length( rawData ) 1 halfWinSize ] );
caxis( [ 0 MaxMax ] );
set( gca, 'XTick', [ 0 : gridHops : size ] );
set( gca, 'XTickLabel', [] );
set( gca, 'YTick', [ 1 : ( halfWinSize / ( sr / 4000 ) ) : halfWinSize ] );
set( gca, 'YTickLabel', [ 0 : 2000 : ( sr / 2 ) ] );
text( xTxt, yTxt, title, 'EdgeColor', 'k', 'BackgroundColor', 'w' );
bar = colorbar( 'location', 'East' );
set( get( bar, 'YLabel'), 'String', 'Sones' );
set( get( bar, 'YLabel'), 'Position', [ 0.75 MaxMax * 0.15 ] );

% plot overlap add
title = 'Ola';
set( subplot( 6, 1, 6 ), 'Position', [ 0.1, 0.5/7, 0.8, 1/7.333 ] );
imagesc( olaData );
axis xy;
axis( [ 0 length( rawData ) 1 halfWinSize ] );
caxis( [ 0 MaxMax ] );
set( gca, 'XTick', [ 0 : gridHops : size ] );
set( gca, 'XTickLabel', [ 0 : gridMsec : msec ] );
set( gca, 'YTick', [ 1 : ( halfWinSize / ( sr / 4000 ) ) : halfWinSize ] );
set( gca, 'YTickLabel', [ 0 : 2000 : ( sr / 2 ) ] );
text( xTxt, yTxt, title, 'EdgeColor', 'k', 'BackgroundColor', 'w' );
bar = colorbar( 'location', 'East' );
set( get( bar, 'YLabel'), 'String', 'Sones' );
set( get( bar, 'YLabel'), 'Position', [ 0.75 MaxMax * 0.15 ] );

xlabel( 'Milliseconds' );
ylabel( 'Frequency' );

% tighten up borders
tightfig();

% move y label to middle of graphs
ylabel( 'Frequency', 'Position', [ ( -size / 18 ) ( ( halfWinSize * 6.1666 ) / 2 ) ] );

% write plot to file
hgexport( fig, [ fileName, '.err.spect.eps' ] );

% EOF
